package com.gx.util.fileutil;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
import net.coobird.thumbnailator.name.Rename;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

/**
 * Created by Administrator on 2017/7/2.
 */
public class ThumbnailsUtil {

    public static void main(String[] args) throws IOException {

        //在这个例子中，图像original.jpg被调整大小，然后保存到thumbnail.jpg。

//        或者，缩略图将接受文件名作为String。File不需要使用对象来指定图像文件：
        Thumbnails.of(new File("original.jpg"))
                .size(160, 160)
                .toFile(new File("thumbnail.jpg"));

        Thumbnails.of("original.jpg")
                .size(160, 160)
                .toFile("thumbnail.jpg");





        //创建带有旋转和水印的缩略图
        //在此示例中，将图像original.jpg调整大小，然后旋转到顺时针90度，然后将水印放置在半透明的右下角，
        // 然后image-with-watermark.jpg以80％的压缩质量设置保存。
        Thumbnails.of(new File("original.jpg"))
                .size(160, 160)
                .rotate(90)
                .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("watermark.png")), 0.5f)
                .outputQuality(0.8)
                .toFile(new File("image-with-watermark.jpg"));



        //创建一个缩略图并写入 OutputStream
        //在此示例中，将文件中的图像large-picture.jpg调整为最大尺寸为200 x 200（保持原始图像的宽高比），
        // 并将其写入指定OutputStream为PNG图像。

        OutputStream os = null;
        Thumbnails.of("large-picture.jpg")
                .size(200, 200)
                .outputFormat("png")
                .toOutputStream(os);



        //创建固定大小的缩略图
        //代码使用图像originalImage并创建200像素乘以200像素的缩略图，
        // 并将结果存储在其中thumbnail。
        BufferedImage originalImage = ImageIO.read(new File("original.png"));

        BufferedImage thumbnail = Thumbnails.of(originalImage)
                .size(200, 200)
                .asBufferedImage();


        //按照给定的因子缩放图像
        //上述代码拍摄图像originalImage并创建一个缩略图，该缩略图是原始图像的25％，
        // 并使用默认缩放技术来制作存储在其中的缩略图thumbnail。
        BufferedImage originalImage_1 = ImageIO.read(new File("original.png"));

        BufferedImage thumbnail_1 = Thumbnails.of(originalImage_1)
                .scale(0.25)
                .asBufferedImage();


//        创建缩略图时旋转图像
//
//        上述代码采用原始图像并创建一个向下旋转90度的缩略图。
        BufferedImage originalImage_2 = ImageIO.read(new File("original.jpg"));

        BufferedImage thumbnail_2 = Thumbnails.of(originalImage_2)
                .size(200, 200)
                .rotate(90)
                .asBufferedImage();


//        创建带水印的缩略图
        //如图所示，可以通过调用该watermark方法将水印添加到缩略图。
//        可以从Positions枚举中选择定位。
//        缩略图的不透明度（或相反地，透明度）可以通过改变最后一个参数来调整，0.0f缩略图在哪里是完全透明的，
//          并且1.0f水印是完全不透明的。

        BufferedImage originalImage_3 = ImageIO.read(new File("original.jpg"));
        BufferedImage watermarkImage = ImageIO.read(new File("watermark.png"));

        BufferedImage thumbnail_3 = Thumbnails.of(originalImage_3)
                .size(200, 200)
                .watermark(Positions.BOTTOM_RIGHT, watermarkImage, 0.5f)
                .asBufferedImage();



        //将缩略图写入特定目录
//        此示例将使用源图像，并将缩略图作为文件写入destinationDir（path/to/output目录），
//          同时将其重命名thumbnail.为文件名。
//        path/to/output/thumbnail.apple.jpg
//        path/to/output/thumbnail.banana.jpg
//        path/to/output/thumbnail.cherry.jpg


        File destinationDir = new File("path/to/output");

        Thumbnails.of("apple.jpg", "banana.jpg", "cherry.jpg")
                .size(200, 200)
                .toFiles(destinationDir, Rename.PREFIX_DOT_THUMBNAIL);

        //还可以在写入指定的目录时保留原始文件名：

        File destinationDir_1 = new File("path/to/output");

        Thumbnails.of("apple.jpg", "banana.jpg", "cherry.jpg")
                .size(200, 200)
                .toFiles(destinationDir_1, Rename.NO_CHANGE);

//        在上面的代码中，缩略图将被写入：
//
//        path/to/output/apple.jpg
//        path/to/output/banana.jpg
//        path/to/output/cherry.jpg

    }
}
